package geral.manager;

import geral.util.FacesUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import aspecto.annotation.Permissao;
import br.com.sgc.entities.rh.Cargo;
import br.com.sgc.exception.ValidacaoException;
import br.com.sgc.permissao.Role;
import br.com.sgc.session.GenericSession;

@Named
@ConversationScoped
public class CargoManager extends GenericManager implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB private GenericSession<Cargo> cargoSession;

	private Cargo cargo = new Cargo();

	private List<Cargo> listCargo = new ArrayList<Cargo>();
	
	@Inject private UtilManager utilManager; 

	
	@Permissao(role = Role.Sistema_RH_Cargo_Listar)
	public String list() {
		prepareSave();
		listCargo = cargoSession.findAll(Cargo.class, utilManager.getSegurancaManager().getUsuarioLogado().getClinica().getId());
		return "formCargo";
	}

	@Permissao(role = Role.Sistema_RH_Cargo_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String prepareSave() {
		cargo = new Cargo();
		cargo.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
		return "formCargo";
	}

	@Permissao(role = Role.Sistema_RH_Cargo_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String save() {
		try {
			cargoSession.save(cargo);
			FacesUtil.mensInfo("Salvo Com Sucesso!");
			return list();

		//Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_RH_Cargo_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String prepareUpdate() {
		cargo = cargoSession.findById(Cargo.class, cargo.getId());
		cargo.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
		return "formCargo";
	}

	@Permissao(role = Role.Sistema_RH_Cargo_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String update() {
		try {
			cargoSession.update(cargo);
			FacesUtil.mensInfo("Atualizado Com Sucesso!");
			return list();

		//Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_RH_Cargo_Excluir)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String delete() {

		try {
			cargoSession.delete(cargo);
			FacesUtil.mensInfo("Exclu�do Com Sucesso!");
			return list();

		// Erros de negócio
		} catch (ValidacaoException e) {
			FacesUtil.mensInfo("Imposs�vel Excluir!");
		}

		return null;
	}

	public GenericSession<Cargo> getCargoSession() {
		return cargoSession;
	}

	public void setCargoSession(GenericSession<Cargo> cargoSession) {
		this.cargoSession = cargoSession;
	}

	public Cargo getCargo() {
		return cargo;
	}

	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}

	public List<Cargo> getListCargo() {
		return listCargo;
	}

	public void setListCargo(List<Cargo> listCargo) {
		this.listCargo = listCargo;
	}

}
